package com.itheima.d2_regex;

import java.util.regex.Matcher;
import java.util.regex.Pattern;

/**
 * @ClassName RegexTest5_Case
 * @Author 16799
 * @Date 2025/7/22 16:46
 * @Version 1.0
 * @Description TODO
 * group 方法：精准捕获匹配内容
 * 基本语法与功能
 * group 方法在 Matcher 类中用于获取正则表达式匹配的结果。它有两种常见的语法形式：
 *
 * group()：
 * 返回与整个正则表达式匹配的输入子序列，也就是找到的完整匹配字符串 。
 * group(int group)：
 * 这里的group是一个整数参数，表示捕获组的索引。它返回由正则表达式中指定捕获组匹配的输入子序列。
 * 需要注意的是，组号从 0 开始，其中组 0 代表整个匹配的结果，组 1 代表第一个捕获组，组 2 代表第二个捕获组，以此类推。
 *
 *在这个例子中，(\\w+)@(\\w+\\.\\w+)是正则表达式，(\\w+)是第一个捕获组，用于匹配用户名，
 * (\\w+\\.\\w+)是第二个捕获组，用于匹配域名。通过matcher.group(0)获取完整的匹配结果，即整个邮箱地址；
 * matcher.group(1)获取第一个捕获组匹配的内容，也就是用户名；matcher.group(2)获取第二个捕获组匹配的内容，即域名。
 *
 * 注意事项
 * 没有匹配项：
 * 如果在调用group方法之前没有成功匹配到任何内容（即matcher.find()返回false），那么调用group方法会抛出IllegalStateException异常。因此，在使用group方法前，务必先调用find方法来确保有匹配结果。
 * 捕获组索引：
 * 捕获组的索引从 0 开始，组 0 表示整个匹配的结果，从 1 开始才是真正的捕获组。如果访问不存在的捕获组索引，例如matcher.group(3)，而正则表达式中只有两个捕获组，那么会抛出IndexOutOfBoundsException异常。
 * 捕获组未匹配：如果某个捕获组在输入字符串中没有匹配到任何内容，那么group(int group)方法针对该捕获组返回的是一个空字符串""，而不是null 。
 **/
public class RegexTest5_Case {
    public static void main(String[] args) {
        String email = "test@example.com";
        String regex = "(\\w+)@(\\w+\\.\\w+)";
        Pattern pattern = Pattern.compile(regex);
        Matcher matcher = pattern.matcher(email);

        if (matcher.find()){
            System.out.println("完整的邮箱地址： "+matcher.group());
            System.out.println("用户名： "+matcher.group(1));
            System.out.println("域名： "+matcher.group(2));
        }
    }
}
